From: Jeroen van der Heijden Date: Mon, 19 Oct 2020 14:17:02 +0000 (+0200) Subject: Skip duplicate series X-Git-Tag: archive/raspbian/2.0.44-1+rpi1~1^2~3^2~1^2~5 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=f61f37ce8214068a24071d60184353bc2a11fd20;p=siridb-server.git Skip duplicate series --- diff --git a/include/siri/version.h b/include/siri/version.h index 37584078..d2f3a2aa 100644 --- a/include/siri/version.h +++ b/include/siri/version.h @@ -15,7 +15,7 @@ * Note that debian alpha packages should use versions like this: * 2.0.34-0alpha0 */ -#define SIRIDB_VERSION_PRE_RELEASE "-alpha-0" +#define SIRIDB_VERSION_PRE_RELEASE "-alpha-1" #ifndef NDEBUG #define SIRIDB_VERSION_BUILD_RELEASE "+debug" diff --git a/src/siri/db/buffer.c b/src/siri/db/buffer.c index 6a317173..67d405ed 100644 --- a/src/siri/db/buffer.c +++ b/src/siri/db/buffer.c @@ -341,6 +341,12 @@ int siridb_buffer_load(siridb_t * siridb) { continue; } + else if (series->tp == TP_STRING) + { + log_error("Unexpected buffer found for string series '%s'", + series->name); + continue; + } series->buffer = siridb_points_new(max_len, series->tp); if (series->buffer == NULL) diff --git a/src/siri/db/series.c b/src/siri/db/series.c index d6593472..f4f5b355 100644 --- a/src/siri/db/series.c +++ b/src/siri/db/series.c @@ -1590,12 +1590,44 @@ static int SERIES_load(siridb_t * siridb, imap_t * dropped) series_tp, siridb->server->pool, (const char *) qp_series_name.via.raw); + if (series != NULL) { /* add series to c-tree */ - if (ct_add(siridb->series, series->name, series) || - imap_add(siridb->series_map, series->id, series)) + int rc = ct_add(siridb->series, series->name, series); + + if (rc == CT_EXISTS) + { + /* Duplicate series found */ + siridb_series_t * other = ct_get( + siridb->series, + series->name); + + log_error( + "Series '%s' with ID %"PRIu32" has a duplicate " + "ID %"PRIu32", " + "(SiriDB will keep the highest ID)", + series->name, + series->id, + other->id); + + if (other->id >= series->id) + { + siridb__series_free(series); + continue; + } + + (void) ct_pop(siridb->series, series->name); + (void) imap_pop(siridb->series_map, other->id); + + siridb__series_free(other); + + rc = ct_add(siridb->series, series->name, series); + } + + if(rc || imap_add(siridb->series_map, series->id, series)) { + log_critical("series cannot be added"); return -1; } }